package br.com.requisicao.compra.Bean;

import java.security.Principal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;

import br.com.requisicao.compra.canonico.Cidade;
import br.com.requisicao.compra.canonico.Fornecedor;
import br.com.requisicao.compra.constantes.ConstantesMensagensErros;
import br.com.requisicao.compra.constantes.ConstantesMensagensSucesso;
import br.com.requisicao.compra.exception.BeanException;
import br.com.requisicao.compra.service.impl.CidadeService;
import br.com.requisicao.compra.service.impl.FornecedorService;

@ManagedBean(name = "cadastroFornecedorBean")
@SessionScoped
public class CadastroFornecedorBean {

	private Fornecedor fornecedor;
	private List<SelectItem> cidades;

	public String inicializar() {

		FacesContext context = FacesContext.getCurrentInstance();

		try {
			this.fornecedor = new Fornecedor();
			this.cidades = null;
		} catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage(
					ConstantesMensagensErros.ERRO_INESPERADO_INICIAR_VALORES);
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, msg);
		}
		return "cadastroFornecedor";
	}

	public void salvar(ActionEvent event) {

		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletRequest request = (HttpServletRequest) context
				.getExternalContext().getRequest();
		Principal usuario = request.getUserPrincipal();

		try {

			this.fornecedor.setSolicitante(usuario.getName());
			this.fornecedor.setDataCriacao(new Date());

			new FornecedorService().salvar(this.fornecedor);

			this.fornecedor = new Fornecedor();

			FacesMessage msg = new FacesMessage(
					ConstantesMensagensSucesso.FORNECEDOR_SALVA_SUCESSO);
			msg.setSeverity(FacesMessage.SEVERITY_INFO);
			context.addMessage(null, msg);
		} catch (BeanException e) {
			context.addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR, e
							.getMessage(), e.getMessage()));
		} catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage(
					ConstantesMensagensErros.ERRO_INESPERADO_SALVAR_FORNECEDOR);
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, msg);
		}
	}

	public List<SelectItem> getListaCidades() {
		if (this.cidades == null) {
			this.cidades = new ArrayList<SelectItem>();
			List<Cidade> listaCidades = new CidadeService().obtemCidade();
			this.cidades.add(new SelectItem(null, "Selecione..."));
			for (Cidade cidade : listaCidades) {
				this.cidades.add(new SelectItem(cidade, cidade.getCidade()));
			}
		}
		return this.cidades;
	}

	/**
	 * @return the fornecedor
	 */
	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	/**
	 * @param fornecedor
	 *            the fornecedor to set
	 */
	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	/**
	 * @return the cidades
	 */
	public List<SelectItem> getCidades() {
		return cidades;
	}

	/**
	 * @param cidades
	 *            the cidades to set
	 */
	public void setCidades(List<SelectItem> cidades) {
		this.cidades = cidades;
	}

}